package modelo.dao.implementacion;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import modelo.dao.UsuariosDAO;
import modelo.transfer.Usuario;

public class Usuarios implements UsuariosDAO {
	
	private ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
	private boolean datosActualizados = false;

	@Override
	public Usuario crearUsuario(String nombre, String password) {
		
		String sql = "INSERT INTO usuarios (`nombre`, `password`, `es_admin`) "
					+ "VALUES ('" + nombre + "','" + password + "'," + "0)";
		
		try {
			ConectorBBDD.iniciarConexion();
			ResultSet rs = ConectorBBDD.realizarConsulta(true, sql);
			
			if (rs != null){
				datosActualizados = false;
				/*rs.moveToInsertRow();*/
				int id = rs.getInt("id_usuario");
				Usuario nuevoUsuario = new Usuario(id, false, nombre, password);
				/*usuarios.add(nuevoUsuario);*/
				ConectorBBDD.cerrarConexion();
				return nuevoUsuario;
			}			

			ConectorBBDD.cerrarConexion();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null,
				    "Error creando el nuevo usuario.",
				    "Error",
				    JOptionPane.ERROR_MESSAGE);
		}
		
		
		return null;
	}
	
	@Override
	public Usuario modificarUsuario(int id, String nombre, String password) {

		String sql = "UPDATE `usuarios` SET"+" `nombre`= '"+nombre+
				"',`password`='"+password+"' WHERE id_usuario="+id;
	
		try {
			ConectorBBDD.iniciarConexion();
			ResultSet rs = ConectorBBDD.realizarConsulta(true, sql);
			
			if (rs != null){
				ConectorBBDD.cerrarConexion();
				datosActualizados = false;
				
				for (Usuario us : usuarios){
					if (us.getId() == id){
						us.setNombre(nombre);
						us.setPassword(password);
						us.setId(id);
						return us;
					}
				}
				
			}			

			ConectorBBDD.cerrarConexion();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
		return null;
	}


	@Override
	public boolean eliminarUsuario(int id) {

		String sql = "DELETE FROM `usuarios` WHERE id_usuario="+id;
	
		try {
			ConectorBBDD.iniciarConexion();
			ResultSet rs = ConectorBBDD.realizarConsulta(true, sql);
						
			if (rs != null){
				datosActualizados = false;
				
				/*Usuario aBorrar = null;
				for (Usuario us : usuarios){
					if (us.getId() == id){
						aBorrar = us;
						break;
					}
				}*/

				//usuarios.remove(aBorrar);

				ConectorBBDD.cerrarConexion();
				return true;
			}	
			

			ConectorBBDD.cerrarConexion();
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
		return false;
	}

	@Override
	public ArrayList<Usuario> verUsuarios() {

		if (datosActualizados){
			return this.usuarios;
		}
		
		String sql = "SELECT * FROM `usuarios`";
	
		try {
			ConectorBBDD.iniciarConexion();
			ResultSet rs = ConectorBBDD.realizarConsulta(false, sql);
			
			if (rs != null){
				
				usuarios.clear();
				
				do {
					Usuario nuevoUsuario = new Usuario(rs.getInt("id_usuario"), 
													   rs.getBoolean("es_admin"), 
													   rs.getString("nombre"), 
													   rs.getString("password"));
					usuarios.add(nuevoUsuario);
				} while (rs.next());
			
				datosActualizados = true;

				ConectorBBDD.cerrarConexion();
				
				return usuarios;
			}			
			

			ConectorBBDD.cerrarConexion();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return null;
	}	
	
	
	// DEPRECADOS

	@Override
	public Usuario modificarUsuario(String nombre, String password) {
		return null;
	}	

	@Override
	public boolean eliminarUsuario(String nombre) {
		return false;
	}

}
